.text
.global _sum, _add, _sub

_sum:
mov x0, #0x100
mov x1, #0x200
cmp x0, x1          //cmp指令，让x0-x1，结果影响cpsr 寄存器的值【31位是负数位，30位是0位】
ret


//X0 到 X7 通常用于函数参数和返回值，更多的函数参数放内存中
//x0 通常用来做函数返回值
_add:
    add x0, x0, x1
    ret

_sub:
    sub x0, x0, x1
    ret
/*
_test_ldr:       //load address
    mov x1, #0x1000
    ldr x0, [x1]            //从内存地址x1中读取值到x0，x0是八个字节，所以读取8个字节存放到x0
    ldr w2, [x1]            //从内存地址x1中读取值到x0，w2是4个字节，所以读取4个字节存放到w2
    ldr x0, [x1, #0x4]      //从内存地址x1+4中读取值到x0
    ldr x0, [x1, #0x4]!     //从内存地址x1+4中读取值到x0，并且改变x1的值，x1=x1+0x4
    ldr x0, [x1], #0x4      //从内存地址x1+4中读取值到x0，并且改变x1的值，x1=x1+0x4
    ldr x0, [x1,x2]         //从内存地址x1+x2中读取值到x0
    ret

_test_ldur:
    mov x1, #0x1000
    ldur x0, [x1, #-0x8]    //作用于ldr一致，但是ldr用于正数相加，ldur用于负数
    ret

_test_ldp:  //p是pair一对的意思
    ldp w0, w1, [x2, #0x1]  //从地址x2+0x1中读取八个字节的值，高4字节放到w0中，低4字节放到w1中
    ret

_test_str:   //store address
    str x0, [x1]            //将x0中的值写入x1所在的内存地址
    str x0, [x1 , #0x11]
    stur x0, [x1 , #-0x20]   //将x0中的值写入x1-0x20所在的内存地址
    stp w0,w1, [x1, #0x50]   //从地址x1+#0x50中写八个字节的值，w0放到高4字节中，w1放到低4字节中
    ret
    
*/
